// File: jmcomic-core/src/main/java/dev/jukomu/jmcomic/entity/JmSearchPage.java
package dev.jukomu.jmcomic.entity;

import dev.jukomu.jmcomic.config.JmModuleConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Collections;
import java.util.List;

/**
 * 对应Python的JmSearchPage和JmCategoryPage，表示搜索或分类页面的内容。
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class JmSearchPage extends JmPageContent {

    // 搜索结果可能包含一个JmAlbumDetail实例，如果搜索的是单个本子ID
    private transient JmAlbumDetail singleAlbum;

    /**
     * 构造函数。
     *
     * @param content 分页内容列表
     * @param total   总结果数
     */
    public JmSearchPage(List<ContentItem> content, int total) {
        super(content, total);
    }

    /**
     * 默认构造函数（用于JSON反序列化）。
     */
    public JmSearchPage() {
        super(null, 0);
    }

    @Override
    public int getPageSize() {
        return JmModuleConfig.PAGE_SIZE_SEARCH;
    }

    /**
     * 判断当前搜索页面是否只包含一个本子（例如通过ID搜索）。
     *
     * @return 如果只包含一个本子返回 true
     */
    public boolean isSingleAlbum() {
        return singleAlbum != null;
    }

    /**
     * 获取唯一的本子详情，如果此页面代表单个本子。
     *
     * @return JmAlbumDetail实例
     */
    public JmAlbumDetail getSingleAlbum() {
        return singleAlbum;
    }

    /**
     * 返回作者迭代器（Stream）。
     *
     * @return 作者Stream
     */
    public java.util.stream.Stream<String> iterAuthor() {
        return content.stream().map(ContentItem::getAuthor);
    }

    /**
     * 静态工厂方法，用于将单个JmAlbumDetail包装成JmSearchPage。
     *
     * @param album JmAlbumDetail实例
     * @return 包含单个本子的JmSearchPage
     */
    public static JmSearchPage wrapSingleAlbum(JmAlbumDetail album) {
        ContentItem item = new ContentItem(
                album.getAlbumId(),
                new java.util.HashMap<String, Object>() {{
                    put("name", album.getName());
                    put("tags", album.getTags());
                    put("author", album.getAuthor());
                }}
        );
        JmSearchPage page = new JmSearchPage(Collections.singletonList(item), 1);
        page.singleAlbum = album; // 设置内部的singleAlbum
        return page;
    }
}